// 本文件用来设置 Mockjs 的二次封装
// 用来设置 请求和响应拦截器,并添加一些 token 和开启 loading 效果

// 导入 axios
import axios from 'axios'
// 导入 NProgress
import nprogress from 'nprogress'
// 导入 NProgress 的css样式
import 'nprogress/nprogress.css'

const request = axios.create({
  // 基础 url
  // 模拟 后端返回的数据,修改了基础路径
  baseURL: 'https://www.haiyang.com',
  // 超时时间
  timeout: 5000
})

// 添加请求拦截器
request.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    // 显示loading 效果进度条
    nprogress.start()
    return config
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
request.interceptors.response.use(
  (response) => {
    // 2xx 范围内的状态码都会触发该函数。
    // 把data中的数据返回给请求
    // 数据返回后将liading 效果关闭
    nprogress.done()
    return response.data
  },
  (error) => {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 超时如果超时,也会走到这个函数

    // 第一种方式：直接将错误返回出去，但是这种返回方式不符合需求
    // return Promise.reject(error)

    // 错误的统一处理
    alert(error.message)

    // 第二种方式,直接返回一个 Promise , 代码不在成功状态也不再失败状态,而是处于一个 pending状态, 就不会向下转递
    return new Promise(() => {})
  }
)
// 导出
export default request
